<?php

namespace Sisesporte\Auth;

use Doctrine\ORM\EntityManager;
use Zend\Authentication\Adapter\AdapterInterface;
use Zend\Authentication\Result;
use Sisesporte\Entity\Pessoa;

class Adapter implements AdapterInterface {

    /**
     * @var EntityManager
     */
    protected $em;
    protected $noLogin;
    protected $noSenha;

    public function __construct(EntityManager $em) {
        $this->em = $em;
    }

    public function getNoLogin() {
        return $this->noLogin;
    }

    public function setNoLogin($noLogin) {
        $this->noLogin = $noLogin;
        return $this;
    }

    public function getNoSenha() {
        return $this->noSenha;
    }

    public function setNoSenha($noSenha) {
        $this->noSenha = $noSenha;
        return $this;
    }

    /**
     * Autentica Usuário.
     * @return \Zend\Authentication\Result
     */
    public function authenticate() {
        $repository = $this->em->getRepository("Sisesporte\Entity\Autenticacao");
        $user = $repository->findByMatriculaAndSenha($this->getNoLogin(), $this->getNoSenha());
        if ($user) {
            $repoPessoa = $this->em->getRepository("Sisesporte\Entity\Pessoa");
            return new Result(Result::SUCCESS, 
                    array('user' => $this->_populateIdentity($repoPessoa->find($user))), 
                    array('OK')
            );
        } else {
            return new Result(Result::FAILURE_CREDENTIAL_INVALID, null, array());
        }
    }

    /**
     * Popula Objetos que estarão na sessão;
     * @param \Sisesporte\Entity\Pessoa $obj
     * @return \stdClass
     */
    private function _populateIdentity(Pessoa $obj) {
        $pessoa = new \stdClass();
        $pessoa->sqPessoa = $obj->getSqPessoa();
        $pessoa->noPessoa = $obj->getNoPessoa();
        $pessoa->nuCpf = $obj->getNuCpf();
        $pessoa->inTipoPessoa = $obj->getInTipoPessoa();
        $pessoa->noEmail = $obj->getNoEmail();
        $pessoa->noTipoPessoa = $this->_getNomeTipoPessoa($obj->getInTipoPessoa());
        $pessoa->txCaminhoFoto = $obj->getTxCaminhoFoto();
        
        return $pessoa;
    }
    
    private function _getNomeTipoPessoa($inTipoPessoa){
        $noTipoPessoa = "";
        switch ($inTipoPessoa){
            case "A":
                $noTipoPessoa = "ALUNO";
                break;
            case "P":
                $noTipoPessoa = "PROFESSOR";
                break;
            case "S":
                $noTipoPessoa = "SERVIDOR";
                break;
        }
        return $noTipoPessoa;
    }

}
